| function iCantThinkOfAName(num, obj) { | |
| // This array variable, along with the 2 parameters passed in, | |
| // are 'captured' by the nested function 'doSomething' | |
| var array = [1, 2, 3]; | |
| function doSomething(i) { | |
| num += i; | |
| array.push(num); | |
| console.log('num: ' + num); | |
| console.log('array: ' + array); | |
| console.log('obj.value: ' + obj.value); | |
| } | |
| return doSomething; | |
| } | |
| var referenceObject = { value: 10 }; | |
| var foo = iCantThinkOfAName(2, referenceObject); // closure #1 | |
| var bar = iCantThinkOfAName(6, referenceObject); // closure #2 | |
| foo(2); | |
| /* | |
| num: 4 | |
| array: 1,2,3,4 | |
| obj.value: 10 | |
| */ | |
| bar(2); | |
| /* | |
| num: 8 | |
| array: 1,2,3,8 | |
| obj.value: 10 | |
| */ | |
| referenceObject.value++; | |
| foo(4); | |
| /* | |
| num: 8 | |
| array: 1,2,3,4,8 | |
| obj.value: 11 | |
| */ | |
| bar(4); | |
| /* | |
| num: 12 | |
| array: 1,2,3,8,12 | |
| obj.value: 11 | |
| */ |